www.gusucode.com > VC++ COleDropTarget扩展类来支持任意窗口拖放,文本拖动-源码程 > VC++ COleDropTarget扩展类来支持任意窗口拖放,文本拖动-源码程序/code/DropListBox.cpp
// DropListBox.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "dropexdemo.h" #include "DropListBox.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDropListBox CDropListBox::CDropListBox() { } CDropListBox::~CDropListBox() { } BEGIN_MESSAGE_MAP(CDropListBox, CListBox) //{{AFX_MSG_MAP(CDropListBox) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP ON_MESSAGE(DROPM_DRAGOVER,OnDragOver) ON_MESSAGE(DROPM_DROPEX,OnDropEx) ON_MESSAGE(DROPM_DROP,OnDrop) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDropListBox message handlers BOOL CDropListBox::Register() { return m_dropEx.Register( this ); } DROPEFFECT CDropListBox::OnDragOver(WPARAM pDropInfoClass, LPARAM lParm) { COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass; ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo))); if( pInfo->m_pDataObject->IsDataAvailable( CF_TEXT ) ) return DROPEFFECT_COPY; else return DROPEFFECT_NONE; } DROPEFFECT CDropListBox::OnDropEx(WPARAM pDropInfoClass, LPARAM lParm) { return (DROPEFFECT)-1; } BOOL CDropListBox::OnDrop(WPARAM pDropInfoClass, LPARAM lParm) { COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass; ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo))); if( pInfo->m_pDataObject->IsDataAvailable( CF_TEXT ) ) { HGLOBAL hMem = pInfo->m_pDataObject->GetGlobalData( CF_TEXT ); char* lp = (char *)GlobalLock((HGLOBAL) hMem);//lock source if (lp != NULL) { //Add listbox item AddString( lp ); } GlobalUnlock( hMem );//unlock source return TRUE; } else return FALSE; }